from pydantic import BaseModel
from typing import Optional


# 数据模型基类: UserapiCacheBase，用于描述基础字段的类型、用途和注意点
class UserapiCacheBase(BaseModel):
    key: str  # 对应数据库中的key字段
    content: str  # 对应数据库中的content字段
    lastupdate: int  # 对应数据库中的lastupdate字段


class UserapiCacheCreate(UserapiCacheBase):
    """
    用于创建新的ims_userapi_cache记录:
    - 继承自UserapiCacheBase，不额外添加字段
    - 仅表示此Schema专用于'创建'场景
    """
    pass


class UserapiCacheUpdate(BaseModel):
    """
    用于更新已有ims_userapi_cache记录:
    - 只包含可选字段，未在此处的内容将保持不变
    - 注意: exclude_unset=True 可以避免更新空值
    """
    key: Optional[str]
    content: Optional[str]


class UserapiCache(UserapiCacheBase):
    """
    表示完整的ims_userapi_cache记录:
    - id: 数据库主键ID
    - 包含所有字段的最终模型，ORM转换时使用
    """
    acid: int  # 表中的主键ID

    class Config:
         from_attributes = True


# 数据模型基类: UserapiReplyBase，用于描述基础字段的类型、用途和注意点
class UserapiReplyBase(BaseModel):
    rid: int
    description: str
    apiurl: str
    token: str
    default_text: str
    cachetime: int


class UserapiReplyCreate(UserapiReplyBase):
    """
    用于创建新的ims_userapi_reply记录:
    - 继承自UserapiReplyBase，不额外添加字段
    - 仅表示此Schema专用于'创建'场景
    """
    pass


class UserapiReplyUpdate(BaseModel):
    """
    用于更新已有ims_userapi_reply记录:
    - 只包含可选字段，未在此处的内容将保持不变
    - 注意: exclude_unset=True 可以避免更新空值
    """
    rid: Optional[int]
    description: Optional[str]
    apiurl: Optional[str]
    token: Optional[str]
    default_text: Optional[str]
    cachetime: Optional[int]


class UserapiReply(UserapiReplyBase):
    """
    表示完整的ims_userapi_reply记录:
    - id: 数据库主键ID
    - 包含所有字段的最终模型，ORM转换时使用
    """
    adid: int  # 表中的主键ID

    class Config:
         from_attributes = True